﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.IO;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SMA.GENTEv1;
using Telerik.Web.UI;

public partial class Protegidos_Empresas_Documentos_edLegalCadAcoesJudiciais : PageBase 
{
    private const int ItemsPerRequest = 10;
    private const string dbPath = "arq/";

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Session["Reclamantes"] = null;
            InicializarGradeReclamantes();
            OcultaCampos(true);
        }
    }

    #region Eventos
    protected void btnGravar_Click(object sender, EventArgs e)
    {
        try
        {
            BindValidResults();
        }
        catch (Exception ex)
        {
            lblResultado.Text = ex.Message;
        }
    }

    protected void rcbReclamante_ItemsRequested(object o, RadComboBoxItemsRequestedEventArgs e)
    {
        Pessoa pessoa = new Pessoa();
        List<Pessoa> listPessoa = pessoa.SelectPessoaPesquisa(e.Text, IdPrestador);

        int itemOffset = e.NumberOfItems;
        int endOffset = Math.Min(itemOffset + ItemsPerRequest, listPessoa.Count);
        e.EndOfItems = endOffset == listPessoa.Count;

        for (int i = itemOffset; i < endOffset; i++)
        {
            rcbReclamante.Items.Add(new RadComboBoxItem(listPessoa[i].Nome, listPessoa[i].IdPessoa.ToString()));
        }

        e.Message = GetStatusMessage(endOffset, listPessoa.Count);
    }

    protected void rgReclamantes_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
    {
        if (Session["Reclamantes"] != null)
        {
            List<Pessoa> listPessoa = (List<Pessoa>)Session["Reclamantes"];
            rgReclamantes.DataSource = listPessoa;
        }
    }

    protected void rgReclamantes_DeleteCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
    {
        try
        {
            lblResultado.Text = "";

            GridEditableItem editedItem = e.Item as GridEditableItem;

            List<Pessoa> listPessoa = (List<Pessoa>)Session["Reclamantes"];

            for (int i = 0; i < listPessoa.Count; i++)
            {
                if (listPessoa[i].IdPessoa == int.Parse(editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["IdPessoa"].ToString()))
                {
                    listPessoa.RemoveAt(i);
                    break;
                }
            }

            Session["Reclamantes"] = listPessoa;
        }
        catch (Exception ex)
        {
            lblResultado.Text = ex.Message;
        }
    }

    protected void btnAdicionar_Click(object sender, EventArgs e)
    {
        try
        {
            AdicionarReclamante();
            rcbReclamante.Text = "";
            rcbReclamante.Focus();
        }
        catch (Exception ex)
        {
            lblResultado.Text = ex.Message;
        }
    }
    #endregion

    #region Métodos
    private void InicializarGradeReclamantes()
    {
        List<Pessoa> pessoa = new List<Pessoa>();
        rgReclamantes.DataSource = pessoa;
        rgReclamantes.DataBind();
    }

    private void ExibeResultado()
    {
        trSeleciona.Visible = false;
        trResultado.Visible = true;
        btnGravar.Visible = false;
        btnAdicionar.Visible = false;

        trNumProcesso.Visible = false;
        trDataAbertura.Visible = false;
        trTituloReclamante.Visible = false;
        trNomeReclamante.Visible = false;
        trReclamantesSel.Visible = false;
        trTituloHistorico.Visible = false;
        trDataHistorico.Visible = false;
        trDescrHistorico.Visible = false;
    }

    private void BindValidResults()
    {
        string nameFile = Salvar();

        if (RadUpload1.UploadedFiles.Count > 0)
        {
            foreach (UploadedFile validFile in RadUpload1.UploadedFiles)
            {
                string targetFolder = Server.MapPath("~/Arq");
                validFile.SaveAs(Path.Combine(targetFolder, nameFile), true);
            }

            labelNoResults.Visible = false;
            repeaterResults.Visible = true;
            repeaterResults.DataSource = RadUpload1.UploadedFiles;
            repeaterResults.DataBind();
        }
        else
        {
            labelNoResults.Visible = true;
            repeaterResults.Visible = false;
        }

        ExibeResultado();
    }

    protected string Salvar()
    {
        AcoesLegaisProcesso processo = new AcoesLegaisProcesso();
        processo.NumProcesso = txtNumProcesso.Text;
        processo.DtAberturaProc = DateTime.Parse(rdpDataAbertura.SelectedDate.ToString());
        processo.Organizacao = new Organizacao(IdPrestador, false, false);
        processo.Obs = "Abertura do Processo";

        processo.Reclamante = new List<AcoesLegaisReclamante>();
        for (int i = 0; i < rgReclamantes.Items.Count; i++)
        {
            int idreclamante = int.Parse(rgReclamantes.MasterTableView.DataKeyValues[i]["IdPessoa"].ToString());

            AcoesLegaisReclamante reclamante = new AcoesLegaisReclamante();
            reclamante.PessoaReclamante = new Pessoa(idreclamante);
            reclamante.DtAdesaoProcesso = DateTime.Now;

            processo.Reclamante.Add(reclamante);
        }

        AcoesLegaisHistoricoProcesso historico = new AcoesLegaisHistoricoProcesso();
        if (rdpDataHistorico.SelectedDate != null)
            historico.DtHistorico = DateTime.Parse(rdpDataHistorico.SelectedDate.ToString());
        historico.Obs = txtHistorico.Text;
        historico.EmailEnviado = "";
        if (RadUpload1.UploadedFiles.Count > 0)
        {
            historico.Imagem = new AcoesLegaisImagemProcesso();
            historico.Imagem.Path = dbPath;
        }
        processo.Historico = new List<AcoesLegaisHistoricoProcesso>();
        processo.Historico.Add(historico);

        processo.Salvar();

        string nomearquivo = "";
        if (RadUpload1.UploadedFiles.Count > 0)
        {
            FileInfo _fileInfo = new FileInfo(processo.Historico[0].Imagem.Path);
            nomearquivo = _fileInfo.Name;
        }
        else
        {
            nomearquivo = "";
        }

        return nomearquivo;
    }

    private void OcultaCampos(bool oculta)
    {
        trResultado.Visible = !oculta;
    }

    private static string GetStatusMessage(int offset, int total)
    {
        if (total <= 0)
            return "No matches";

        return String.Format("Items <b>1</b>-<b>{0}</b> de <b>{1}</b>", offset, total);
    }

    private void AdicionarReclamante()
    {
        if (rcbReclamante.SelectedValue == string.Empty)
            throw new Exception("É necessário selecionar um reclamante!");
        
        List<Pessoa> listPessoa = new List<Pessoa>();

        if (Session["Reclamantes"] != null)
            listPessoa = (List<Pessoa>)Session["Reclamantes"];

        Pessoa pessoa = new Pessoa(int.Parse(rcbReclamante.SelectedValue));
        listPessoa.Add(pessoa);
        rgReclamantes.DataSource = listPessoa;
        rgReclamantes.DataBind();

        Session["Reclamantes"] = listPessoa;
    }
    #endregion
}
